package com.haige.common.webkit;

import lombok.Getter;
import lombok.Setter;

import java.io.Serial;
import java.io.Serializable;

@Setter
@Getter
public class ApiResult<T> implements Serializable {
    @Serial
    private static final long serialVersionUID = -1133637474601003587L;
    /**
     * 接口响应状态码
     */
    private int code;
    /**
     * 接口响应信息
     */
    private String msg;
    /**
     * 接口响应的数据
     */
    private T data;

    /**
     * 封装成功响应的方法
     *
     * @param data 响应数据
     * @param <T>  响应数据类型
     * @return reponse
     */
    public static <T> ApiResult<T> success(T data) {

        ApiResult<T> response = new ApiResult<>();
        response.setData(data);
        response.setCode(StatusEnum.SUCCESS.code);
        return response;
    }

    /**
     * 封装error的响应
     *
     * @param statusEnum error响应的状态值
     * @param <T>
     * @return
     */
    public static <T> ApiResult<T> error(StatusEnum statusEnum) {
        return error(statusEnum, statusEnum.message);
    }

    /**
     * 封装error的响应  可自定义错误码和错误信息
     *
     * @param errCode  error响应的状态值
     * @param errorMsg 自定义错误信息
     * @return
     */
    public static <T> ApiResult<T> errorCustom(int errCode, String errorMsg) {
        ApiResult<T> apiResult = new ApiResult<>();
        apiResult.setCode(errCode);
        apiResult.setMsg(errorMsg);
        return apiResult;
    }

    /**
     * 封装error的响应  可自定义错误信息
     *
     * @param statusEnum error响应的状态值
     * @param errorMsg   自定义错误信息
     * @return
     */
    public static <T> ApiResult<T> error(StatusEnum statusEnum, String errorMsg) {
        ApiResult<T> apiResult = new ApiResult<>();
        apiResult.setCode(statusEnum.code);
        apiResult.setMsg(errorMsg);
        return apiResult;
    }
}